💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    04 로그인 기능 구현 및 URL View Template 연결 | ✅ 편저: 코담 운영자

    4강 - 로그인 기능 구현 및 URL-View-Template 연결

    url-view-template 연결


    ✨ 이번 강의 목표

    • 사용자 로그인 기능 구현
    • URL → View → Template 흐름 이해 및 연결
    • Django 기본 로그인 로직 활용

    🗂️ 프로젝트 디렉토리 구조 요약

    django_instagram/
    ├── config/
    │   └── settings/
    │       └── base.py
    │   └── urls.py
    ├── django_instagram/
    │   └── users/
    │       ├── urls.py
    │       ├── views.py
    │   └── posts/
    │       ├── urls.py
    │       ├── views.py
    ├── templates/
    │   ├── users/
    │   │   └── main.html
    │   ├── posts/
    │   │   └── index.html
    │   └── pages/
    │       └── about.html
    

    🔗 1. URL 설정

    Django 프로젝트에서 URL 설정은 웹 요청을 해당 view 함수로 연결해주는 역할을 합니다. 이 단계에서는 각 앱(users, posts)에 대한 경로를 config/urls.py에 등록하고, 각각의 앱 내부에 urls.py 파일을 생성하여 기능별로 요청을 분기합니다.

    config/urls.py

    from django.conf import settings
    from django.conf.urls.static import static
    from django.contrib import admin
    from django.urls import include, path
    from django.views.generic import TemplateView
    
    urlpatterns = [
        path("about/", TemplateView.as_view(template_name="pages/about.html"), name="about"),
        path(settings.ADMIN_URL, admin.site.urls),
        path("users/", include("users.urls", namespace="users")),
        path("accounts/", include("allauth.urls")),
        path("posts/", include("posts.urls", namespace="posts")),
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    users/urls.py

    from django.urls import path
    from . import views
    
    app_name = "users"
    
    urlpatterns = [
        path('main/', views.main, name="main")
    ]
    

    posts/urls.py

    from django.urls import path
    from . import views
    
    app_name = "posts"
    
    urlpatterns = [
        path('', views.index, name="index")
    ]
    

    🧭 2. View 구현

    View는 사용자의 요청을 처리하고, 적절한 응답(템플릿 렌더링 또는 리다이렉트 등)을 반환하는 함수입니다. 여기서는 로그인 요청을 처리하고 성공 시 게시물 페이지로 이동하거나 실패 시 에러 메시지를 표시합니다.

    users/views.py

    from django.shortcuts import render, redirect
    from django.contrib.auth import authenticate, login
    
    def main(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect('posts:index')
            else:
                return render(request, 'users/main.html', {"error_message": "로그인 실패"})
        return render(request, 'users/main.html')
    

    posts/views.py

    def index(request):
        return render(request, 'posts/index.html')
    

    🖼️ 3. Template 작성

    Template은 사용자에게 보여지는 HTML 페이지로, Django의 템플릿 언어를 활용하여 데이터를 동적으로 출력할 수 있습니다. 로그인 화면에서는 사용자 입력 폼과 에러 메시지 표시, 그리고 TailwindCSS로 스타일링된 UI를 구성합니다.

    templates/users/main.html

    <script src="https://unpkg.com/@tailwindcss/browser@4"></script>
    
    <div class="w-full flex flex-col items-center justify-center min-h-screen bg-gray-100">
      <div class="bg-white p-8 rounded-lg shadow-md w-full max-w-md text-center">
        <h1 class="text-2xl font-bold text-gray-800 mb-6">로그인</h1>
        <form action="{% url 'users:main' %}" method="post" class="space-y-4">
          {% csrf_token %}
          <input type="text" name="username" placeholder="사용자이름(아이디)" required class="w-full p-3 border border-gray-300 rounded-lg text-sm" />
          <input type="password" name="password" placeholder="비밀번호" required class="w-full p-3 border border-gray-300 rounded-lg text-sm" />
          {% if error_message %}
            <div class="text-red-500 text-sm">{{ error_message }}</div>
          {% endif %}
          <button type="submit" class="w-full py-3 bg-blue-500 text-white text-lg rounded-lg hover:bg-blue-600">로그인</button>
        </form>
      </div>
      <div class="mt-6">
        <a href="{% url 'users:signup' %}" class="text-sm text-blue-500 hover:underline">회원가입</a>
      </div>
    </div>
    

    templates/posts/index.html

    <h1>여기는 posts index 화면입니다.</h1>
    

    ⚙️ 4. 앱 등록 및 슈퍼유저 생성

    Django에서 생성한 앱을 프로젝트에 인식시키려면 settings/base.pyLOCAL_APPS 항목에 등록해야 합니다. 또한 관리자 계정(superuser)을 생성하면 admin 페이지 접근이 가능하며, 로그인 테스트도 수월해집니다.

    settings/base.py

    LOCAL_APPS = [
        "users",
        "posts",
    ]
    

    슈퍼유저 생성

    python manage.py createsuperuser
    

    namespace 충돌 경고 발생 시 users 네임스페이스 중복 여부 확인 필요


    ✅ 정리

    이번 강의에서는 Django의 기본 로그인 구조를 활용하여 로그인 흐름을 구현해보았습니다. 이 과정을 통해 URL → View → Template의 흐름을 이해하고, 사용자 인증의 기본 원리를 익힐 수 있습니다.

    • Django의 authenticate, login 기능을 활용한 로그인 처리
    • 로그인 성공 시 posts:index 페이지로 리다이렉트
    • 실패 시 에러 메시지 표시
    • CSRF 토큰 사용 필수

    다음 강의에서는 회원가입 기능을 구현합니다.

    TOP
    preload preload